import os
import downloader
#创建临时文件夹
if not os.path.exists('workdir/m3u8s'):
    os.makedirs('workdir/m3u8s')
if not os.path.exists('workdir/output'):
    os.makedirs('workdir/output')
if not len(os.listdir('workdir/m3u8s'))==0:
    for file in os.listdir('workdir/m3u8s'):
        os.remove('workdir/m3u8s/' + file)
#删除输出临时文件
if os.path.exists('workdir/output/m3u8.mp4'):
    os.remove('workdir/output/m3u8.mp4')
#读取输入文件路径
path = input("请输入文件路径:")
#逐行读取文件,并将链接加入到list中
m3u8List = []
num = 1
with open(path,'r') as m3u8:
    for line in m3u8.readlines():
        if line.startswith('#'):
            m3u8List.append(line)
        else:
            filePath = 'workdir/m3u8s/' + str(num) + '.ts'
            m3u8List.append(filePath + '\n')
            #下载数组链接文件
            downloader.save_ts(line.strip('\n'),filePath)
            num = num + 1
#输出打印链接数组信息
print('数组的数量为：',str(num-1))
#判断是否全部下载
if (num-1) != len(os.listdir('workdir/m3u8s')):
    YnContinue = input("发现有文件未下载!是否继续？(Y/N)").upper()
    if YnContinue == 'Y':
        pass
    elif YnContinue == 'N':
        exit()
    else:
        exit()
else:
    print("文件全部下载完成")
#开始拼接文件
print("开始拼接文件")
#解析链接，确定精确顺序和时间
#生成m3u8文件
with open('m3u8.m3u8','w') as f:
    for line in m3u8List:
        f.write(line)
#调用ffmpeg合并视频文件
downloader.call_ffmpeg('ffmpeg -i m3u8.m3u8  -c copy workdir/output/m3u8.mp4')
outFile = path.split("\\")[-1].split(".")[0]
#视频文件改名
#如果输出文件已经存在了，则自动在文件名后方加下划线和数字
if os.path.exists('workdir/output/'+ outFile +'.mp4'):
    fileNum = 1
    finalName = finalName = outFile + '_' + str(fileNum)
    while os.path.exists('workdir/output/'+ finalName +'.mp4'):
        finalName = outFile + '_' + str(fileNum)
        fileNum = fileNum + 1
    outFile = finalName
os.rename('workdir/output/m3u8.mp4','workdir/output/'+ outFile +'.mp4')
#输出文件信息
fileStat = os.stat('workdir/output/'+ outFile +'.mp4')
print('文件路径：'+os.path.abspath('workdir/output/'+ outFile +'.mp4'))
print('文件大小：' + str(round(fileStat.st_size/(1024*1024),2)) + 'MB')
#清空临时工作目录中的必要文件
YnClear = input('是否要保留临时文件，下次启动程序时仍会清空？（Y/N）').upper()
if YnClear=='Y':
    pass
elif YnClear=='N':
    for file in os.listdir('workdir/m3u8s'):
        os.remove('workdir/m3u8s/' + file)
    os.remove('m3u8.m3u8')
    print("完成清空")
else :
    pass
print("程序运行完毕")